import string

import numpy as np
import pandas as pd

# 手搓DataFrame
df1 = pd.DataFrame(
    [
        [1, 2, 3],
        [4, 5, 6]
    ]
)
df2 = pd.DataFrame(
    {
        # 指定列的方式
        'A': [1, 2, 3],
        'B': [4, 5, 6]
    }
)

# 数据来自于外部文件
'''
CSV文件：默认是以','分割--> read_csv读，to_csv写
Excel文件：read_excel读，to_excel写
SQL文件：read_sql
JSON文件：read_json
'''
# 指定一个列名：header指定列名所在行，如果数据集的列名不存在则设置为空，否则默认第一行为列名
# names表示为人工定义名字,names后面跟上的是list
# na_values表示缺失值，默认是NaN;除了指定单个字符为空值表示，也可以使用list的方式表达
cols = list(string.ascii_lowercase[:14])
df = pd.read_csv(
    './adult.data',  # 这个数据集的缺失值的表示默认是？
    header=None,
    names=cols,
    na_values=' ?'
    # na_values=[' ?', '?']
)
# 重点： 查看数据类型，缺失值
print(df.info())
# 重点：查看数据的头部信息
print(df.head(10))

# 导出DataFrame
print(df1)
# 在导出的时候会出现带上索引导出可能会有数据歧义，可以设置index=False不带index
df1.to_csv("./df1.csv", index=False)
df2 = pd.DataFrame(
    {
        # 指定列的方式
        'A': [1, 2, 3],
        'B': [4, 5, 6],
        # 如何在DataFrame中指定空值:使用np.nan表示空值
        'C': [7, np.nan, 9]
    }
)
print(df2)
# 在导出数据时候会发现np.nan的数据所在位置为空，为了避免对数据的影响，可以指定空值占位符na_rep=' ?'
df2.to_csv("./df2.csv", index=False, na_rep=' ?')

# Pycharm的帮助使用help(): help(df2.to_csv)
# jupyter/ModelArts的帮助使用?: df2.to_csv?